# 使用Java 17基础镜像
FROM openjdk:17
LABEL authors="fs"

# 设置时区为Asia/Shanghai，可以根据需要更改
ENV TIME_ZONE=Asia/Shanghai

# 更新时区
RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone

# 设置容器内的工作目录
WORKDIR /opt

# 将当前目录下的jar包复制到docker容器的/目录下
ADD /target/ds-admin.jar /opt/ds-admin.jar

# 暴露端口
ENV SERVER_PORT=10010 LANG=C.UTF-8 LC_ALL=C.UTF-8

EXPOSE ${SERVER_PORT}

#-Xms5324m: 设置 Java 堆的初始值为 5324 MB。
#-Xmx5324m: 设置 Java 堆的最大值为 5324 MB。这指定了 Java 堆可以使用的最大内存量。
#-XX:MaxMetaspaceSize=256m: 设置 Metaspace 区域的最大大小为 256 MB。Metaspace 用于存储类的元数据，而不是传统的永久代。
#-XX:MetaspaceSize=256m: 设置 Metaspace 区域的初始大小为 256 MB。
#-XX:MaxDirectMemorySize=983m: 设置直接内存的最大大小为 983 MB。这是堆外内存，通常由 NIO (New I/O) 使用。
#-Djava.library.path=/usr/local/lib: 指定本地库的搜索路径。
#-server: 启用服务器模式。服务器模式通常用于长时间运行的 Java 应用程序，以优化性能。
#-XX:+HeapDumpOnOutOfMemoryError: 当发生 OutOfMemoryError 时，生成堆转储文件。
#-XX:HeapDumpPath=/dumps/oom_dump.hprof: 指定堆转储文件的路径。堆转储文件将被写入 /dumps/oom_dump.hprof 目录文件中。
#-Djava.awt.headless=true: 表示在无图形环境中运行 Java 应用程序，没有图形用户界面 (GUI)。
#-Dsun.net.client.defaultConnectTimeout=60000: 设置默认的连接超时时间为 60,000 毫秒。
#-Dsun.net.client.defaultReadTimeout=60000: 设置默认的读取超时时间为 60,000 毫秒。
#-Djmagick.systemclassloader=no: 关闭 JMagick 的系统类加载器。
#-Dnetworkaddress.cache.ttl=300: 设置网络地址缓存的 TTL (生存时间) 为 300 秒。
#-Dsun.net.inetaddr.ttl=300: 设置 Inet 地址的 TTL 为 300 秒。
#-XX:+UseZGC: 启用 Z Garbage Collector。ZGC 是一种低延迟的垃圾回收器，适用于大内存应用。
#-Xloggc:/opt/logs/gc.log
#-XX:+PrintGCDetails

ENV JAVA_OPTS="-server -Xms64m -Xmx128m -XX:+UseZGC -Xloggc:/opt/logs/gc.log -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/dumps/oom_dump.hprof"

# 设置容器启动时执行的命令
#ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -Dlogging.file=/app/logs/application.log -jar /opt/respory-1.0-SNAPSHOT.jar $APP_ENV"]

ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
           # 应用名称 如果想区分集群节点监控 改成不同的名称即可
           #-Dskywalking.agent.service_name=ruoyi-server \
           #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
           -jar ds-admin.jar \
            ${JAVA_OPTS} \
            --spring.profiles.active=prod

